<?php

require_once 'DAO.php';

/**
 * Nsfe
 *
 * @package NFSeFconSantos
 * @since 0.1
 */
class Nsfe {

    private $HOST = 'localhost:3306', $USER = 'root', $PASS = '', $DB = 'mydb';

    /**
     * $[...]
     * Atributos da NFSe.
     * @access public
     */
            public $idnfes = '',
            $numeroNfse = '',
            $codVerificacao = '',
            $dataEmissaoNfse = '',
            $idNfesSubstituida = '',
            $outrasInformacoes = '',
            $aliquotaServicos = '',
            $baseCalculo = '',
            $valorLiquidoNfse = '',
            $valorCredito = '',
            $idPrestador = '',
            $razaoSocialPrestador = '',
            $nomeFantasiaPrestador = '',
            $enderecoPrestador = '',
            $numeroEnderecoPrestador = '',
            $complementoEnderecoPrestador = '',
            $bairroPrestador = '',
            $cidadePrestador = '',
            $ufPrestador = '',
            $paisPrestador = '',
            $cepPrestador = '',
            $emailPrestador = '',
            $telefonePrestador = '',
            $codigoMunicipioGerador = '',
            $ufDoMunicipioGerador = '',
            $competencia = '',
            $valorServicos = '',
            $valorDeducoes = '',
            $valorPis = '',
            $valorCofins = '',
            $valorInss = '',
            $valorIr = '',
            $valorCsll = '',
            $outrasRetencoes = '',
            $valorIss = '',
            $aliquota = '',
            $descontoIncondicionado = '',
            $descontoCondicionado = '',
            $issRetido = '',
            $responsavelRetencao = '',
            $itemListaServico = '',
            $codigoCnae = '',
            $codigoTributacaoMunicipio = '',
            $paisPrestacaoServico = '',
            $exigibilidade = '',
            $municipioIncidencia = '',
            $numeroProcesso = '',
            $regimeEspecialTributacao = '',
            $optanteSimplesNacional = '',
            $incentivoFiscal = '',
            $cpfCnpjPrestador = '',
            $inscricaoPrestador = '',
            $idTomador = '',
            $cpfCnpjTomador = '',
            $inscricaoMunicipalTomador = '',
            $razaoSocialTomador = '',
            $enderecoTomador = '',
            $numeroEnderecoTomador = '',
            $complementoEnderecoTomador = '',
            $bairroTomador = '',
            $cidadeTomador = '',
            $ufTomador = '',
            $paisTomador = '',
            $cepTomador = '',
            $emailTomador = '',
            $telefoneTomador = '',
            $cpfCnpjIntermediario = '',
            $inscricaoMunicipalIntermediario = '',
            $razaoSocialIntermediario = '',
            $codigoObra = '',
            $art = '',
            $assinaturaPrestador = '',
            $assinaturaAdministracaoTributaria = '',
            $idUsuarioCriador ='';

    /**
     * Grava a Nota no banco de dados
     *
     * @since 0.1
     * @access public
     */
    public function gravar() {
        //Instancia o DAO
        $dao = new DAO($this->HOST, $this->USER, $this->PASS, $this->DB);

        
        
        // Configura uma variável para receber todos os dados do NSFe para gravar no banco
        $dados = array(
            'idnfes' => $this->idnfes,
            'numeroNfse' => $this->numeroNfse,
            'codVerificacao' => $this->codVerificacao,
            'dataEmissaoNfse' => $this->dataEmissaoNfse,
            'idNfesSubstituida' => $this->idNfesSubstituida,
            'outrasInformacoes' => $this->outrasInformacoes,
            'aliquotaServicos' => $this->aliquotaServicos,
            'baseCalculo' => $this->baseCalculo,
            'valorLiquidoNfse' => $this->valorLiquidoNfse,
            'valorCredito' => $this->valorCredito,
            'idMunicipioGerador' => $this->codigoMunicipioGerador,
            
            //dados do prestador
            'idPrestador' => $this->idPrestador,
            'cpfCnpjPrestador'=> $this->cpfCnpjPrestador,
            'inscricaoPrestador'=>$this->inscricaoPrestador,
            'razaoSocialPrestador'=>$this->razaoSocialPrestador,
            'nomeFantasiaPrestador' => $this->nomeFantasiaPrestador,
            'enderecoPrestador' => $this->enderecoPrestador,
            'numeroEnderecoPrestador' => $this->numeroEnderecoPrestador,
            'complementoEnderecoPrestador' => $this->complementoEnderecoPrestador,
            'bairroPrestador' => $this->bairroPrestador,
            'cidadePrestador' => $this->cidadePrestador,
            'ufPrestador' => $this->ufPrestador,
            'paisPrestador' => $this->paisPrestador,
            'cepPrestador' => $this->cepPrestador,
            'emailPrestador' => $this->emailPrestador,
            'telefonePrestador' => $this->telefonePrestador,
            
            //dados do tomador
            'idTomador'=>$this->idTomador,
            'cpfCnpjTomador' => $this->cpfCnpjTomador,
            'inscricaoMunicipalTomador' => $this->inscricaoMunicipalTomador,
            'razaoSocialTomador' => $this->razaoSocialTomador,
            'enderecoTomador' => $this->enderecoTomador,
            'numeroEnderecoTomador' => $this->numeroEnderecoTomador,
            'complementoEnderecoTomador' => $this->complementoEnderecoTomador,
            'bairroTomador' => $this->bairroTomador,
            'cidadeTomador' => $this->cidadeTomador,
            'ufTomador' => $this->ufTomador,
            'paisTomador' => $this->paisTomador,
            'cepTomador' => $this->cepTomador,
            'emailTomador' => $this->emailTomador,
            'telefoneTomador' => $this->telefoneTomador,
            //outros dados
            'cpfCnpjIntermediario' => $this->cpfCnpjIntermediario,
            'inscricaoMunicipalIntermediario' => $this->inscricaoMunicipalIntermediario,
            'razaoSocialIntermediario' => $this->razaoSocialIntermediario,
            'idMunicipioGerador'=>  $this->codigoMunicipioGerador,
            'codigoObra' => $this->codigoObra,
            'art' => $this->art,
            'assinaturaPrestador' => $this->assinaturaPrestador,
            'assinaturaAdministracaoTributaria' => $this->assinaturaAdministracaoTributaria,
            'idUsuarioCriador' => $this->idUsuarioCriador
        );

        //Grava no banco de dados
        $gravar = $dao->insert('nfes', $dados);

        //erro ao gravar
        if (!$gravar) {
            echo '<script>Alert("Erro ao gravar a Nota!!");<script>';
        }//fim if
        //fecha conexão
        $dao->close();
    }

    //fim função Gravar

    /**
     * getPrestador
     *
     * @since 0.1
     * @access public
     * @param int $idPrestador Código do Prestador do Serviço
     */
    public function setPrestador($cpfCnpj = 0) {
        //Instancia o DAO
        $dao = new DAO($this->HOST, $this->USER, $this->PASS, $this->DB);

        $Prestador = $dao->select('prestador_tomador', "WHERE cpfCnpj='{$cpfCnpj}'");

        //DEBUG
        //print_r($Prestador);
        //Atribui os valores do Prestador
        
        $this->idPrestador = $Prestador[0]['idPrestadorTomador'];
        $this->razaoSocialPrestador = $Prestador[0]['razaoSocial'];
        $this->nomeFantasiaPrestador = $Prestador[0]['nomeFantasia'];
        $this->enderecoPrestador = $Prestador[0]['endereco'];
        $this->numeroEnderecoPrestador = $Prestador[0]['numeroEndereco'];
        $this->complementoEnderecoPrestador = $Prestador[0]['complementoEndereco'];
        $this->bairroPrestador = $Prestador[0]['bairro'];
        $this->cidadePrestador = $Prestador[0]['idCidade'];
        $this->ufPrestador = 'PI'; //VALOR PADRÃO
        $this->paisPrestador = 1; //VALOR PADRÃO BRASIL
        $this->cepPrestador = $Prestador[0]['cep'];
        $this->emailPrestador = $Prestador[0]['email'];
        $this->telefonePrestador = $Prestador[0]['telefone'];

        //fecha conexão
        $dao->close();
    }

//fim função getPrestador

    /**
     * Gera o Código de verificação da Nota
     *
     * Obtém um hash de 9 caracteres
     *
     * @since 0.1
     * @access public
     */
    public function geraCodigoVerifcacao() {
        //Alfabeto correspondente ao ultimo caractere do hash
        $bloco = array(
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'y', 'z',
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'Y', 'Z',
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
        );

        //hash crc32 corresponde ao hash de 8 caracteres, o bloco corresponde ao ultimo caractere
        //sendo selecionado por um número randômico
        $this->codVerificacao = hash('crc32', time()) . $bloco[rand(0, 59)];
    }

//fim função geraCodigoVerifcacao


    public function getIdNota($codigo) {
        //Instancia o DAO
        $dao = new DAO($this->HOST, $this->USER, $this->PASS, $this->DB);
        $idUsuario = $dao->select('nfes', "where codVerificacao='{$codigo}'", 'idnfes');
        return $idUsuario[0]['idnfes'];
    }
    
    public function getIdUsuarioCriador($cpfCnpj) {
        //Instancia o DAO
        $dao = new DAO($this->HOST, $this->USER, $this->PASS, $this->DB);
        $idUsuario = $dao->select('usuario', "where cpfCnpj='{$cpfCnpj}'");
        $this->idUsuarioCriador =  (int)$idUsuario[0]['idusuario'];
    }
    public function getIdPrestadorTomador($cpfCnpj) {
        //Instancia o DAO
        $dao = new DAO($this->HOST, $this->USER, $this->PASS, $this->DB);
        $idUsuario = $dao->select('prestador_tomador', "where cpfCnpj='{$cpfCnpj}'");
        $this->idTomador =  (int)$idUsuario[0]['idPrestadorTomador'];
    }

}//fim classe
?>
